package com.cool.mybatis.mapper;

import com.cool.mybatis.entity.Blog;
import com.cool.mybatis.entity.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author ifredomvip@gmail.com
 * @Date 2022/5/20 10:31
 * @Version 1.0.0
 * @Description
 **/
public interface UserMapper {

    /**
     * 增
     *
     * @return 用户条数
     */
    int insertUser();

    /**
     * 删
     *
     * @return 用户条数
     */
    int deleteUser();

    /**
     * 改
     *
     * @return 用户条数
     */
    int updateUser();

    /**
     * 查
     *
     * @return 用户条数
     */
    User queryUserById();

    /**
     * 无条件
     *
     * @return 用户条数
     */
    List<User> queryAllUserById();

    /**
     * 单一参数
     *
     * @param username username
     * @return 用户条数
     */
    User queryUserByName(String username);

    /**
     * 多个参数
     *
     * @param username username
     * @param password password
     * @return 用户条数
     */
    User queryCheckLogin(String username, String password);

    /**
     * 参数为map对象
     *
     * @param user Map
     * @return 用户条数
     */
    User queryCheckLogin2(Map<String, Object> user);

    /**
     * 参数为 Entity对象
     *
     * @param user User
     * @return 用户条数
     */
    int insertNewUser(User user);


    /**
     * 注解 @Param
     * 直动以 注解中的值为键，以参数值为值，放在map中
     *
     * @param username username
     * @param password password
     * @return User
     */
    User selectByParamAnnotation(@Param("username") String username, @Param("password") String password);


    /**
     * count(*) count(1)
     *
     * @return int int
     */
    int selectCountAllUser();

    /**
     * 注解 @Param
     * 直动以 注解中的值为键，以参数值为值，放在map中
     *
     * @param id id
     * @return User //@MapKey("id")
     */
    @MapKey("id")
    Map<String, Object> selectByReturnMap(@Param("id") Integer id);

    /**
     * 注解 @Param
     * 直动以 注解中的值为键，以参数值为值，放在map中
     *
     * @return User //@MapKey("id")
     */
    @MapKey("id")
    Map<String, Object> selectByReturnListMap();

}
